package com.arpa.wms.service;

import com.arpa.core.web.Result;
import com.arpa.wms.domain.dto.InventoryOperationDto;
import com.arpa.wms.domain.dto.OutboundRegisterDTO;
import com.arpa.wms.domain.entity.OutboundRegister;
import com.arpa.wms.domain.vo.OutboundRegisterVO;
import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 出库单明细 服务类
 * </p>
 *
 * @author LEO
 * @since 2020-10-27
 */
public interface IOutboundRegisterService extends IService<OutboundRegister> {

    /**
     * 保存
     * @param entity
     * @return
     */
    @Override
    boolean save(OutboundRegister entity);

    /**
     * 根据code更新实体
     * @param entity
     * @return
     */
    int updateByCode(OutboundRegister entity);

    /**
     * 查询列表
     * @param outboundRegisterDTO
     * @return
     */
    List<OutboundRegisterVO> queryList(OutboundRegisterDTO outboundRegisterDTO);

    /**
     * 查询合计,包含总数
     * @param outboundRegisterDTO
     * @return
     */
    OutboundRegisterVO queryListSum(OutboundRegisterDTO outboundRegisterDTO);

    /**
     * 根据出库单、商品编码、确认状态查询出库复核单列表
     * @param outboundRegisterDTO
     * @return
     */
    List<OutboundRegisterVO> queryRegisterList(OutboundRegisterDTO outboundRegisterDTO);

    /**
     * @description
     * 保存，如果存在相同信息的出库复核信息，则合并
     * @author xuyang
     * @date 2020/10/29 8:21
     * @param register:
     **/
    Result distinctSave(OutboundRegister register);

    /**
     * 更新复核数量
     * @author liuxr
     * @date 2021/4/12 18:45
     * @param outboundCode 出库单号
     * @param oldInventoryCode 原库存code
     * @param reviewCount 复核数量
     * @return int 更新条数
     */
    int generalReviewUpdateInfo( String outboundCode,  String oldInventoryCode,  BigDecimal reviewCount,String groupCode,boolean updateNotRecheckQuantity);


    /**
     * 订单取消更新出库确认明细数量
     * @author liuxr
     * @date 2021/5/21 21:23
     * @param wavePickingCode
     * @param allQuantityList
     */
    void deliveryCancelUpdataQuantity(String wavePickingCode, List<InventoryOperationDto> allQuantityList);

    /**
     * 根据波次号和状态查询列表
     * @param outboundRegisterDTO
     * @return
     */
    List<OutboundRegisterVO> queryListGroupByWavePickingCodeAndStatus(OutboundRegisterDTO outboundRegisterDTO);

    /**
     * 更新复核数量及状态
     * @author rfwang
     * @date 2022年3月16日
     * @param outboundCode 出库单号
     * @param deliveryItemCode 订单明细号
     * @param reviewCount 复核数量
     * @return int 更新条数
     */
    int updateRecheckQuantityAndStatus( String outboundCode,  String deliveryItemCode,  BigDecimal reviewCount,String groupCode);

}
